package com.example;

import java.util.ArrayList;
import java.util.List;

/**
 * 简化版JVM UseAdaptiveSizePolicy问题演示程序
 * 
 * 这个程序可以更直观地展示UseAdaptiveSizePolicy对Survivor区的影响
 */
public class SimpleAdaptiveSizeDemo {
    
    public static void main(String[] args) throws InterruptedException {
        System.out.println("简化版JVM Adaptive Size Policy问题演示");
        System.out.println("该程序会持续创建对象，观察GC行为...");
        System.out.println("请使用JVM参数运行:");
        System.out.println("1. 启用UseAdaptiveSizePolicy(默认): -XX:+UseAdaptiveSizePolicy");
        System.out.println("2. 禁用UseAdaptiveSizePolicy: -XX:-UseAdaptiveSizePolicy");
        System.out.println("==========================================");
        
        // 持续创建对象
        List<Object> objects = new ArrayList<>();
        
        for (int i = 0; i < 100000; i++) {
            // 创建不同大小的对象
            if (i % 100 == 0) {
                // 偶尔创建大对象（模拟长生命周期对象）
                objects.add(new byte[1024 * 1024]); // 1MB
            } else {
                // 大量创建小对象（模拟短生命周期对象）
                objects.add(new byte[1024]); // 1KB
            }
            
            // 定期清理部分对象（模拟垃圾回收）
            if (i % 5000 == 0) {
                // 清理80%的对象
                int keepCount = objects.size() / 5;
                if (keepCount < objects.size()) {
                    objects = new ArrayList<>(objects.subList(objects.size() - keepCount, objects.size()));
                }
                System.out.println("已创建 " + i + " 个对象，当前保留对象数: " + objects.size());
            }
            
            // 控制执行速度
            Thread.sleep(10);
        }
        
        System.out.println("程序执行完成");
    }
}